{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading KMeans Flop Classifier 1719047678_samples=10000_bins=10.npy\n",
      "Loading KMeans Turn Classifier 1719048213_samples=10000_bins=10.npy\n"
     ]
    }
   ],
   "source": [
    "import joblib\n",
    "import numpy as np\n",
    "from postflop_holdem import PostflopHoldemInfoSet\n",
    "from preflop_holdem import PreflopHoldemInfoSet\n",
    "from abstraction import get_preflop_cluster_id, predict_cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "preflop_infosets = joblib.load('preflop_infoSets_batch_19.joblib')\n",
    "postflop_infosets = joblib.load('postflop_infoSets_batch_19.joblib')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of preflop keys:  2704\n",
      "Total number of postflop keys:  131799\n"
     ]
    }
   ],
   "source": [
    "print(\"Total number of preflop keys: \", len(preflop_infosets))\n",
    "print(\"Total number of postflop keys: \", len(postflop_infosets))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'56'"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str(get_preflop_cluster_id('5h6s'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'56'"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str(get_preflop_cluster_id('6h5s'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'c': 0.33076268353705524,\n",
       " 'bMIN': 0.3997344936840788,\n",
       " 'bMID': 0.23711391076983374,\n",
       " 'bMAX': 0.019214777902763335,\n",
       " 'f': 0.01317413410626897}"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preflop_infosets[str(get_preflop_cluster_id('KsQh'))].get_average_strategy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "92"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_preflop_cluster_id('2hAh')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "preflop_infosets[str(get_preflop_cluster_id('AsAh')) + 'c'].get_average_strategy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<BarContainer object of 10 artists>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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AACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMN6pgaWxslMPhUGZmpsrKytTW1jbi2r/85S+688475XA4lJaWpoaGhiFrHn74YaWlpcUdRUVFoxkNAACkoISDpbm5WV6vV7W1tero6ND8+fPldrvV1dU17PozZ85o5syZqq+vl91uH3Hfa6+9Vh988EHseOWVVxIdDQAApKiEg2Xbtm1avXq1PB6P5s6dq6amJk2cOFG7du0adv3ChQv13e9+V8uXL5fVah1x3wkTJshut8eO3NzcREcDAAApKqFgGRgYUHt7u1wu17kN0tPlcrkUCAQ+0yDvvPOO8vPzNXPmTN19993q7OwccW1/f7/C4XDcAQAAUldCwdLT06PBwUHZbLa48zabTcFgcNRDlJWV6cc//rFaWlq0Y8cOvf/++7r55pv14YcfDrve5/MpJycndhQUFIz67wYAAOYz4qeElixZorvuukvFxcVyu93at2+fTp06pZ/+9KfDrq+urlZvb2/sOHr06BhPDAAAxtKERBbn5ubKYrEoFArFnQ+FQud9oDZRV1xxhb74xS/q3XffHfbzVqv1vM/DAACA1JLQHZaMjAyVlJTI7/fHzkUiEfn9fpWXl1+0oU6fPq333ntPeXl5F21PAABw+UroDoskeb1erVq1SqWlpVq0aJEaGhrU19cnj8cjSVq5cqVmzJghn88n6ZMHdd96663Yn48fP66DBw9q8uTJmj17tiTpW9/6lr785S/rC1/4gk6cOKHa2lpZLBatWLHiYl0nAAC4jCUcLJWVleru7lZNTY2CwaCcTqdaWlpiD+J2dnYqPf3cjZsTJ07o+uuvj328detWbd26VbfeeqtaW1slSceOHdOKFSt08uRJfe5zn9NNN92k/fv363Of+9xnvDwAAJAKEg4WSaqqqlJVVdWwnzsbIWc5HA5Fo9Hz7rd3797RjAEAAMYJI35KCAAA4HwIFgAAYDyCBQAAGI9gAQAAxiNYAACA8QgWAABgPIIFAAAYj2ABAADGI1gAAIDxCBYAAGA8ggUAABiP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6quqqtJvfvMb/f73v9fnP//5ZI+Tstrb29XV1aUFCxbEzg0ODur3v/+9tm/frv7+flksliROmFry8vI0d+7cuHPXXHONfv7znydpotS2fv16bdiwQcuXL5ckzZs3T//zP/8jn89HsCQBz7BcYhkZGSopKZHf74+di0Qi8vv9Ki8vT+JkqSkajaqqqkq//OUv9Z//+Z8qLCxM9kgp7fbbb9d//dd/6eDBg7GjtLRUd999tw4ePEisXGQ33njjkB/T/+tf/6ovfOELSZootZ05cybul/lKksViUSQSSdJE4xt3WMaA1+vVqlWrVFpaqkWLFqmhoUF9fX3yeDzJHi3l3H///dqzZ49+9atfacqUKQoGg5KknJwcZWVlJXm61DNlypQhzwdNmjRJV155Jc8NXQL//M//rBtuuEHf+c539A//8A9qa2vTU089paeeeirZo6WkL3/5y3rsscd01VVX6dprr9Xrr7+ubdu26etf/3qyRxufohgTTz75ZPSqq66KZmRkRBctWhTdv39/skdKSZKGPX70ox8le7Rx49Zbb42uXbs22WOkrF//+tfR6667Lmq1WqNFRUXRp556KtkjpaxwOBxdu3Zt9KqrropmZmZGZ86cGX3wwQej/f39yR5tXOJ9WAAAgPF4hgUAABiPYAEAAMYjWAAAgPEIFgAAYDyCBQAAGI9gAQAAxiNYAACA8QgWAABgPIIFAAAYj2ABAADGI1gAAIDxCBYAAGC8/wfW2dXSt924ogAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import abstraction\n",
    "plt.bar([i for i in range(10)], abstraction.kmeans_flop.cluster_centers_[49])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<BarContainer object of 10 artists>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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10dra+uH7t/b2xstLS3xxhtvxOWXX17MUwMAJeqkYhbv3bs3uru7o6qqqt/2qqqq2L59+2H327dvX4wfPz66urqivLw8HnzwwfjsZz972PVdXV3R1dXVd7+jo6OYMQGAAaSoGDlaI0aMiG3btsU777wTLS0tUSgUYsKECfHpT3/6kOubmpri9ttvPxGjAQDJioqR0aNHR3l5ebS3t/fb3t7eHmPHjj3sfmVlZXHuuedGRERtbW28/vrr0dTUdNgYWbp0aRQKhb77HR0dUV1dXcyoAMAAUdQ1I0OHDo2pU6dGS0tL37aenp5oaWmJmTNnHvHj9PT09PszzP+qqKiIkSNH9rsBAKWp6D/TFAqFmD9/ftTV1cX06dOjubk5Ojs7o6GhISIi5s2bF+PHj4+mpqaI+M+fXOrq6uKcc86Jrq6ueOqpp+KRRx6J1atXH99XAgAMSEXHyNy5c2PPnj2xbNmyaGtri9ra2ti0aVPfRa07d+6MsrL3T7h0dnbGDTfcEP/85z9j2LBhMXHixHj00Udj7ty5x+9VAAADVtGfM5LB54wAA4HPGYH+PpLPGQEAON7ECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKnECACQSowAAKlOyh4AgFw1S57MHuEgO5bPzh6BE8iZEQAglRgBAFKJEQAglRgBAFKJEQAglRgBAFKJEQAglRgBAFKJEQAglRgBAFKJEQAglRgBAFKJEQAglW/tBT52fIssDC7OjAAAqcQIAJBKjAAAqY4qRlatWhU1NTVRWVkZM2bMiM2bNx927UMPPRSXXXZZnHbaaXHaaadFfX39B64HAAaXomNk48aNUSgUorGxMbZu3RqTJ0+OWbNmxe7duw+5/plnnolrr702fv/730dra2tUV1fHlVdeGW+99dYxDw8ADHxFx8iKFStiwYIF0dDQEJMmTYo1a9bE8OHDY926dYdc/9hjj8UNN9wQ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fttmzZoVTzzxxGGfp6urK7q6uvru79u3LyIiOjo6ihkXjpsLGn+TPcJBXr191oeu6el69wRMUpwj+f/Y3MePuU+sUp77WB63t7f3A9cVFSN79+6N7u7uqKqq6re9qqoqtm/ffsh92traDrm+ra3tsM/T1NQUt99++0Hbq6urixkXStqo5uwJjo65Tyxzn1jmPrT9+/fHqFGjDvvzj+XnjCxdurTf2ZSenp7417/+FWeccUYMGTIkcbLD6+joiOrq6ti1a1eMHDkye5yS53ifWI73ieV4n1iO90ent7c39u/fH+PGjfvAdUXFyOjRo6O8vDza29v7bW9vb4+xY8cecp+xY8cWtT4ioqKiIioqKvptO/XUU4sZNc3IkSP9Yz6BHO8Ty/E+sRzvE8vx/mh80BmR/yrqAtahQ4fG1KlTo6WlpW9bT09PtLS0xMyZMw+5z8yZM/utj4h4+umnD7seABhciv4zTaFQiPnz50ddXV1Mnz49mpubo7OzMxoaGiIiYt68eTF+/PhoamqKiIjFixfHFVdcEffdd1/Mnj07NmzYEC+99FKsXbv2+L4SAGBAKjpG5s6dG3v27Illy5ZFW1tb1NbWxqZNm/ouUt25c2eUlb1/wuWSSy6J9evXx2233Ra33HJLfOpTn4onnngiLrjgguP3Kj4GKioqorGx8aA/L/HRcLxPLMf7xHK8TyzHO9+Q3g97vw0AwEfId9MAAKnECACQSowAAKnECACQSowcB6tWrYqampqorKyMGTNmxObNm7NHKklNTU0xbdq0GDFiRIwZMybmzJkTb7zxRvZYg8by5ctjyJAhcdNNN2WPUrLeeuut+MpXvhJnnHFGDBs2LC688MJ46aWXsscqSd3d3fHtb387zj777Bg2bFicc845cccdd3zod6jw0RAjx2jjxo1RKBSisbExtm7dGpMnT45Zs2bF7t27s0crOc8++2wsXLgwXnjhhXj66afjvffeiyuvvDI6OzuzRyt5L774YvzgBz+Iiy66KHuUkvXvf/87Lr300vjEJz4Rv/71r+O1116L++67L0477bTs0UrS3XffHatXr46VK1fG66+/HnfffXfcc8898cADD2SPNih5a+8xmjFjRkybNi1WrlwZEf/5RNrq6uq48cYbY8mSJcnTlbY9e/bEmDFj4tlnn43LL788e5yS9c4778SUKVPiwQcfjO9973tRW1sbzc3N2WOVnCVLlsQf//jH+MMf/pA9yqDwhS98IaqqquLhhx/u23b11VfHsGHD4tFHH02cbHByZuQYHDhwILZs2RL19fV928rKyqK+vj5aW1sTJxsc9u3bFxERp59+evIkpW3hwoUxe/bsfv/OOf5+8YtfRF1dXXzpS1+KMWPGxMUXXxwPPfRQ9lgl65JLLomWlpZ48803IyLiz3/+czz//PPx+c9/Pnmywelj+a29A8XevXuju7u779Nn/6uqqiq2b9+eNNXg0NPTEzfddFNceumlJfdpvh8nGzZsiK1bt8aLL76YPUrJ+/vf/x6rV6+OQqEQt9xyS7z44ovx9a9/PYYOHRrz58/PHq/kLFmyJDo6OmLixIlRXl4e3d3dceedd8Z1112XPdqgJEYYkBYuXBivvvpqPP/889mjlKxdu3bF4sWL4+mnn47KysrscUpeT09P1NXVxV133RURERdffHG8+uqrsWbNGjHyEfjxj38cjz32WKxfvz7OP//82LZtW9x0000xbtw4xzuBGDkGo0ePjvLy8mhvb++3vb29PcaOHZs0VelbtGhR/OpXv4rnnnsuzjzzzOxxStaWLVti9+7dMWXKlL5t3d3d8dxzz8XKlSujq6srysvLEycsLZ/85Cdj0qRJ/badd9558dOf/jRpotJ28803x5IlS+Kaa66JiIgLL7ww/vGPf0RTU5MYSeCakWMwdOjQmDp1arS0tPRt6+npiZaWlpg5c2biZKWpt7c3Fi1aFI8//nj87ne/i7PPPjt7pJL2mc98Jl555ZXYtm1b362uri6uu+662LZtmxA5zi699NKD3qr+5ptvxv/93/8lTVTa3n333X5f6hoRUV5eHj09PUkTDW7OjByjQqEQ8+fPj7q6upg+fXo0NzdHZ2dnNDQ0ZI9WchYuXBjr16+Pn//85zFixIhoa2uLiIhRo0bFsGHDkqcrPSNGjDjoepyTTz45zjjjDNfpfAS+8Y1vxCWXXBJ33XVXfPnLX47NmzfH2rVrY+3atdmjlaSrrroq7rzzzjjrrLPi/PPPj5dffjlWrFgRX/va17JHG5x6OWYPPPBA71lnndU7dOjQ3unTp/e+8MIL2SOVpIg45O1HP/pR9miDxhVXXNG7ePHi7DFK1i9/+cveCy64oLeioqJ34sSJvWvXrs0eqWR1dHT0Ll68uPess87qrays7J0wYULvrbfe2tvV1ZU92qDkc0YAgFSuGQEAUokRACCVGAEAUokRACCVGAEAUokRACCVGAEAUokRACCVGAEAUokRACCVGAEAUokRACDV/wNu5epxj9NelgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.bar([i for i in range(10)], abstraction.kmeans_flop.cluster_centers_[36])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.   , 0.001, 0.055, 0.421, 0.306, 0.097, 0.028, 0.041, 0.035,\n",
       "       0.016])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "abstraction.kmeans_flop.cluster_centers_[39]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6075\n",
      "[0.0, 0.0, 0.0, 0.03, 0.185, 0.36, 0.125, 0.12, 0.155, 0.025]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "28"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict_cluster(['Kh', 'Ts', '5s', 'As', '4s'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "30"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict_cluster(['Kc', 'Kh', '5s', 'As', '4s'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'k': 0.9468431322656019,\n",
       " 'bMIN': 0.043433211029662085,\n",
       " 'bMAX': 0.009723656704736043}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "postflop_infosets['3'].get_average_strategy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'k': 0.8716127939879152,\n",
       " 'bMIN': 0.10757086240756004,\n",
       " 'bMAX': 0.020816343604524678}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "postflop_infosets['5'].get_average_strategy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'k': 0.0015335125212656928,\n",
       " 'bMIN': 0.0005091950382732984,\n",
       " 'bMAX': 0.997957292440461}"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "postflop_infosets['9kk8'].get_average_strategy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "poker-ai",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
